home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 December / PCWorld_2007-12_cd.bin / v cisle / htttrack / httrack-3.41-3.exe / {app} / src_win / WinHTTrack / OptionTab10.cpp < prev    next >
C/C++ Source or Header  |  2006-08-15  |  12KB  |  364 lines

  1. // OptionTab10.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Shell.h"
  6. #include "OptionTab10.h"
  7. #include "ProxyId.h"
  8. #include <winsock2.h>
  9.  
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15.  
  16. /* Externe C */
  17. extern "C" {
  18.   #include "HTTrackInterface.h"
  19.   //#include "htsbase.h"
  20.   //#include "htslib.h"
  21. }
  22.  
  23.   //extern char* jump_identification(char*);
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // COptionTab10 property page
  27.  
  28. IMPLEMENT_DYNCREATE(COptionTab10, CPropertyPage)
  29.  
  30. COptionTab10::COptionTab10() : CPropertyPage(COptionTab10::IDD)
  31. {
  32.   // Patcher titre
  33.   if (LANG_T(-1)) {    // Patcher en franτais
  34.     m_psp.pszTitle=LANG(LANG_IOPT10); // titre
  35.     m_psp.dwFlags|=PSP_USETITLE;
  36.   }
  37.   m_psp.dwFlags|=PSP_HASHELP;
  38.   //
  39.     //{{AFX_DATA_INIT(COptionTab10)
  40.     m_proxy = _T("");
  41.     m_port = _T("");
  42.     m_ftpprox = FALSE;
  43.     //}}AFX_DATA_INIT
  44. }
  45.  
  46. COptionTab10::~COptionTab10()
  47. {
  48. }
  49.  
  50. void COptionTab10::DoDataExchange(CDataExchange* pDX)
  51. {
  52.     CPropertyPage::DoDataExchange(pDX);
  53.     //{{AFX_DATA_MAP(COptionTab10)
  54.     DDX_Control(pDX, IDC_prox, m_ctl_prox);
  55.     DDX_Control(pDX, IDC_PWDHIDE, m_ctl_pwdhide);
  56.     DDX_Control(pDX, IDC_ftpprox, m_ctl_ftpprox);
  57.     DDX_Control(pDX, IDC_portprox, m_ctl_portprox);
  58.     DDX_Control(pDX, IDC_proxtitle, m_ctl_proxtitle);
  59.     DDX_Text(pDX, IDC_prox, m_proxy);
  60.     DDX_Text(pDX, IDC_portprox, m_port);
  61.     DDX_Check(pDX, IDC_ftpprox, m_ftpprox);
  62.     //}}AFX_DATA_MAP
  63. }
  64.  
  65. #define wm_ProxySearch (WM_USER + 1)
  66. BEGIN_MESSAGE_MAP(COptionTab10, CPropertyPage)
  67.     //{{AFX_MSG_MAP(COptionTab10)
  68.     ON_BN_CLICKED(IDC_proxyconfigure, Onproxyconfigure)
  69.     ON_EN_CHANGE(IDC_prox, OnChangeprox)
  70.     ON_BN_CLICKED(IDC_PWDHIDE, OnPwdhide)
  71.     ON_CBN_SELCHANGE(IDC_prox, OnChangeprox)
  72.     ON_CBN_EDITCHANGE(IDC_prox, OnChangeprox)
  73.     ON_CBN_EDITUPDATE(IDC_prox, OnChangeprox)
  74.     //}}AFX_MSG_MAP
  75.   ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  76.   ON_MESSAGE( wm_ProxySearch, ProxySearch0 )
  77.   ON_MESSAGE( wm_ProxySearch+1, ProxySearch1 )
  78.   ON_MESSAGE( wm_ProxySearch+2, ProxySearch2 )
  79.   ON_MESSAGE( wm_ProxySearch+3, ProxySearch3 )
  80.   ON_MESSAGE( wm_ProxySearch+4, ProxySearch4 )
  81.   ON_MESSAGE( wm_ProxySearch+5, ProxySearch5 )
  82.   ON_MESSAGE( wm_ProxySearch+6, ProxySearch6 )
  83.   ON_MESSAGE( wm_ProxySearch+7, ProxySearch7 )
  84.   ON_MESSAGE( wm_ProxySearch+8, ProxySearch8 )
  85.   ON_MESSAGE( wm_ProxySearch+9, ProxySearch9 )
  86. END_MESSAGE_MAP()
  87.  
  88. /////////////////////////////////////////////////////////////////////////////
  89. // COptionTab10 message handlers
  90.  
  91.  
  92. BOOL COptionTab10::OnInitDialog() 
  93. {
  94.     CPropertyPage::OnInitDialog();
  95.     
  96.   EnableToolTips(true);     // TOOL TIPS
  97.  
  98.   /* hide password */
  99.   CString st;
  100.   GetDlgItemText(IDC_prox,st);
  101.   if (st.Find('@')>=0) {
  102.     m_ctl_pwdhide.SetCheck(1);
  103.     OnPwdhide();
  104.   } else {
  105.     m_ctl_pwdhide.SetCheck(0);
  106.     OnPwdhide();
  107.   }
  108.  
  109.   if (LANG_T(-1)) {    // Patcher en franτais
  110.     SetDlgItemTextCP(this, IDC_proxyconfigure,LANG(LANG_I47b)); // "Configurer"
  111.     SetDlgItemTextCP(this, IDC_ftpprox,LANG(LANG_I47c));
  112.     SetDlgItemTextCP(this, IDC_PWDHIDE,LANG_HIDEPWD);  /* Hide password */
  113.   }  
  114.  
  115.   // mode modif α la volΘe
  116.   if (modify==1) {
  117.     GetDlgItem(IDC_prox           ) ->ModifyStyle(0,WS_DISABLED);
  118.     GetDlgItem(IDC_portprox       ) ->ModifyStyle(0,WS_DISABLED);
  119.     GetDlgItem(IDC_proxyconfigure ) ->ModifyStyle(0,WS_DISABLED);
  120.     GetDlgItem(IDC_proxtitle      ) ->ModifyStyle(0,WS_DISABLED);
  121.     GetDlgItem(IDC_ftpprox        ) ->ModifyStyle(0,WS_DISABLED);
  122.   } else {
  123.     GetDlgItem(IDC_prox           ) ->ModifyStyle(WS_DISABLED,0);
  124.     GetDlgItem(IDC_portprox       ) ->ModifyStyle(WS_DISABLED,0);
  125.     GetDlgItem(IDC_proxyconfigure ) ->ModifyStyle(WS_DISABLED,0);
  126.     GetDlgItem(IDC_proxtitle      ) ->ModifyStyle(WS_DISABLED,0);
  127.     GetDlgItem(IDC_ftpprox        ) ->ModifyStyle(WS_DISABLED,0);
  128.   }
  129.  
  130.   CString str;
  131.   GetDlgItemText(IDC_prox,str);
  132.   m_ctl_prox.ResetContent();
  133.   m_ctl_prox.AddString("");
  134.  
  135.   HKEY phkResult;
  136.   if (RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,KEY_READ,&phkResult)==ERROR_SUCCESS) {
  137.     DWORD type=0;
  138.     DWORD datasize=1000;
  139.     char data[1024];
  140.     data[0]='\0';
  141.     if (RegQueryValueEx(phkResult,"ProxyServer",0,&type,(unsigned char*)&data,&datasize)==ERROR_SUCCESS) {
  142.       if (datasize) {
  143.         char* a=strchr(data,':');
  144.         if (a)
  145.           *a='\0';
  146.         m_ctl_prox.AddString(data);
  147.       }
  148.     }
  149.     RegCloseKey(phkResult);
  150.   }
  151.   SetDlgItemTextCP(this, IDC_prox,str);
  152.  
  153.   // Do not search for a proxy everytime
  154.   CWinApp* pApp = AfxGetApp();
  155.   if (pApp->GetProfileInt("Interface","FirstProxySearch",0) != 1) {
  156.     pApp->WriteProfileInt("Interface","FirstProxySearch",1);
  157.     
  158.     // Launch proxy name search
  159.     int i=0;
  160.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="proxy")   ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  161.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="www")     ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  162.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="ns")      ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  163.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="web")     ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  164.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="ntserv")  ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  165.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="gate")    ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  166.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="gateway") ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  167.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="firewall"),this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  168.     WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="cache")   ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  169.     
  170.   }
  171.   
  172.   return TRUE;  // return TRUE unless you set the focus to a control
  173.                   // EXCEPTION: OCX Property Pages should return FALSE
  174. }
  175.  
  176.  
  177. void COptionTab10::Onproxyconfigure() 
  178. {
  179.   CProxyId proxy;
  180.   char adr[256];
  181.   CString s;
  182.   GetDlgItemText(IDC_portprox,s);
  183.   proxy.m_proxport=s;
  184.   GetDlgItemText(IDC_prox,s);
  185.   strcpybuff(adr,s);
  186.   proxy.m_proxadr=jump_identification(adr);
  187.   if (jump_identification(adr)!=adr) {
  188.     char user_pass[256]; user_pass[0]='\0';
  189.     char* a;
  190.     size_t nsize = (size_t) ( ( jump_identification(adr) - adr ) - 1 );
  191.     strncatbuff(user_pass,adr,nsize);
  192.     a=strchr(user_pass,':');
  193.     if (a)
  194.       *a='\0';
  195.     else
  196.       a=user_pass+strlen(user_pass);
  197.     proxy.m_proxlogin=user_pass;
  198.     proxy.m_proxpass=a+1;
  199.   }
  200.   if (proxy.DoModal() == IDOK) {
  201.     if (proxy.m_proxlogin.GetLength()==0) {
  202.       SetDlgItemTextCP(this, IDC_prox,proxy.m_proxadr);
  203.       m_ctl_pwdhide.SetCheck(0);
  204.       OnPwdhide();
  205.     } else {
  206.       SetDlgItemTextCP(this, IDC_prox,proxy.m_proxlogin+":"+proxy.m_proxpass+"@"+proxy.m_proxadr);
  207.       m_ctl_pwdhide.SetCheck(1);
  208.       OnPwdhide();
  209.     }
  210.     SetDlgItemTextCP(this, IDC_portprox,proxy.m_proxport);
  211.   }
  212. }
  213.  
  214.  
  215.  
  216. // ------------------------------------------------------------
  217. // TOOL TIPS
  218. //
  219. // ajouter dans le .cpp:
  220. // remplacer les deux Wid1:: par le nom de la classe::
  221. // dans la message map, ajouter
  222. // ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  223. // dans initdialog ajouter
  224. // EnableToolTips(true);     // TOOL TIPS
  225. //
  226. // ajouter dans le .h:
  227. // char* GetTip(int id);
  228. // et en generated message map
  229. // afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  230. BOOL COptionTab10::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  231. {
  232.   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  233.   UINT_PTR nID =pNMHDR->idFrom;
  234.   if (pTTT->uFlags & TTF_IDISHWND)
  235.   {
  236.     // idFrom is actually the HWND of the tool
  237.     nID = ::GetDlgCtrlID((HWND)nID);
  238.     if(nID)
  239.     {
  240.       char* st=GetTip((int)nID);
  241.       if (st != "") {
  242.         pTTT->lpszText = st;
  243.         pTTT->hinst = AfxGetResourceHandle();
  244.         return(TRUE);
  245.       }
  246.     }
  247.   }
  248.   return(FALSE);
  249. }
  250. char* COptionTab10::GetTip(int ID)
  251. {
  252.   switch(ID) {
  253.     case IDC_prox:  return LANG(LANG_G14); break; // "Proxy if needed","Proxy si besoin"); break;
  254.     case IDC_portprox: return LANG(LANG_G15); break; // "Proxy port","Port du proxy"); break;
  255.     case IDC_proxyconfigure: return LANG_G15b; break;
  256.     case IDC_ftpprox: return LANG_G15c; break;
  257.   }
  258.   return "";
  259. }
  260. // TOOL TIPS
  261. // ------------------------------------------------------------
  262.  
  263.  
  264.  
  265. void COptionTab10::OnChangeprox() 
  266. {
  267.   CString st="";
  268.   char tempo[8192];
  269.   CString port="";
  270.  
  271.   GetDlgItemText(IDC_prox,st);
  272.  
  273.   int pos=st.Find(':');
  274.   if (pos>=0) {
  275.     port=st.Mid(pos+1);
  276.     st=st.Mid(0,pos);
  277.     SetDlgItemTextCP(this, IDC_prox,st);
  278.   }
  279.   strcpybuff(tempo,st);
  280.   
  281.   int ex=0;
  282.   do {
  283.     if (strlen(tempo)>0) {
  284.       switch (tempo[strlen(tempo)-1]) {
  285.       case 10: case 13: case 32: tempo[strlen(tempo)-1]='\0';
  286.         break;
  287.       default: ex=1;
  288.         break;
  289.       }
  290.     } else ex=1;
  291.   } while(!ex);
  292.   
  293.   if ((strlen(tempo)>0)!=prox_status) {
  294.     prox_status=!prox_status;
  295.     
  296.     if (strlen(tempo)>0) {
  297.       CString st="";
  298.       GetDlgItemText(IDC_portprox,st);
  299.       if (strlen(st)==0) {
  300.         SetDlgItemTextCP(this, IDC_portprox,"8080");
  301.         m_ctl_portprox.RedrawWindow();
  302.       }
  303.       m_ctl_proxtitle.ModifyStyle(WS_DISABLED,0);
  304.     }
  305.     else {
  306.       SetDlgItemTextCP(this, IDC_portprox,"");
  307.       m_ctl_portprox.RedrawWindow();
  308.       m_ctl_proxtitle.ModifyStyle(0,WS_DISABLED);
  309.     }
  310.     m_ctl_proxtitle.RedrawWindow();
  311.   }  
  312.  
  313.   if (port.GetLength())
  314.     SetDlgItemTextCP(this, IDC_portprox,port);
  315. }
  316.  
  317. void COptionTab10::OnPwdhide() 
  318. {
  319.   /* ES_PASSWORD */
  320.   if (IsDlgButtonChecked(IDC_PWDHIDE)) {
  321.     GetDlgItem(IDC_prox)->ModifyStyle(WS_VISIBLE,0);
  322.     GetDlgItem(IDC_prox)->ModifyStyle(0,WS_DISABLED);
  323.     GetDlgItem(IDC_portprox)->ModifyStyle(WS_VISIBLE,0);
  324.     GetDlgItem(IDC_portprox)->ModifyStyle(0,WS_DISABLED);
  325.   } else {
  326.     GetDlgItem(IDC_prox)->ModifyStyle(0,WS_VISIBLE);
  327.     GetDlgItem(IDC_prox)->ModifyStyle(WS_DISABLED,0);
  328.     GetDlgItem(IDC_portprox)->ModifyStyle(0,WS_VISIBLE);
  329.     GetDlgItem(IDC_portprox)->ModifyStyle(WS_DISABLED,0);
  330.   }
  331.   RedrawWindow();
  332.  
  333.  
  334. LRESULT COptionTab10::ProxySearch0(WPARAM wParam,LPARAM lParam) { return ProxySearch(0,wParam,lParam); }
  335. LRESULT COptionTab10::ProxySearch1(WPARAM wParam,LPARAM lParam) { return ProxySearch(1,wParam,lParam); }
  336. LRESULT COptionTab10::ProxySearch2(WPARAM wParam,LPARAM lParam) { return ProxySearch(2,wParam,lParam); }
  337. LRESULT COptionTab10::ProxySearch3(WPARAM wParam,LPARAM lParam) { return ProxySearch(3,wParam,lParam); }
  338. LRESULT COptionTab10::ProxySearch4(WPARAM wParam,LPARAM lParam) { return ProxySearch(4,wParam,lParam); }
  339. LRESULT COptionTab10::ProxySearch5(WPARAM wParam,LPARAM lParam) { return ProxySearch(5,wParam,lParam); }
  340. LRESULT COptionTab10::ProxySearch6(WPARAM wParam,LPARAM lParam) { return ProxySearch(6,wParam,lParam); }
  341. LRESULT COptionTab10::ProxySearch7(WPARAM wParam,LPARAM lParam) { return ProxySearch(7,wParam,lParam); }
  342. LRESULT COptionTab10::ProxySearch8(WPARAM wParam,LPARAM lParam) { return ProxySearch(8,wParam,lParam); }
  343. LRESULT COptionTab10::ProxySearch9(WPARAM wParam,LPARAM lParam) { return ProxySearch(9,wParam,lParam); }
  344.  
  345. // Search dor a proxy
  346. #define WSAGETASYNCERROR(lParam)            HIWORD(lParam)
  347. #define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
  348. LRESULT COptionTab10::ProxySearch(int id,WPARAM wParam,LPARAM lParam) {
  349.   int errcode=WSAGETASYNCERROR(lParam);
  350.   int bufflen=WSAGETASYNCBUFLEN(lParam);
  351.  
  352.   if ((id>=0) && (id<10)) {
  353.     if (!errcode) {
  354.       //HOSTENT* host=(HOSTENT*) ProxyDetectBuff[id];
  355.       //if (host->h_name) {
  356.       m_ctl_prox.AddString(ProxyDetectName[id]);
  357.       //}
  358.     }
  359.   }
  360.  
  361.   return 0;
  362. }
  363.